﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InnvoiceActual.Logica.GestorObject;
using InnvoiceActual.Logica.GestorObject.Remito;
using InnvoiceActual.BaseDeDatos.innvoicedbDataSetTableAdapters;
using MySql.Data.MySqlClient;
using System.Windows;
using System.Data;

namespace InnvoiceActual.Logica.GestorDB.RemitoDB
{
    public class PieRemitoDB
    {
        #region Property

        EmpresaCS empresa = EmpresaCS.Instance;

        #endregion

        #region CRUD Methods

        public void AddPieRemito(PieRemito pieRemito)
        {
            int resultadoConsulta;

            pie_remitoTableAdapter pieRemitoTB = new pie_remitoTableAdapter();

            pieRemitoTB.Connection.Open();
            MySqlTransaction transaccion = pieRemitoTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = pieRemito.CodigoEmpresa;
                int nroComprobante1 = pieRemito.NroComprobante1;
                int nroComprobante2 = pieRemito.NroComprobante2;
                byte codigoTipo = pieRemito.CodigoTipo;

                decimal subTotal = pieRemito.SubTotal;
                double bonificacion = pieRemito.Bonificacion;
                string transporte = pieRemito.Transporte;
                string viajante = pieRemito.Viajante;

                int bulto = pieRemito.Bulto;
                decimal pesoKilo = Convert.ToDecimal(pieRemito.PesoKilogramo);

                resultadoConsulta = pieRemitoTB.InsertPieRemito(codigoEmpresa, (short)nroComprobante1, nroComprobante2, codigoTipo, subTotal, (short)bonificacion, transporte, viajante, (short)bulto, pesoKilo);

                transaccion.Commit();

            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error AddPieRemito - PieRemitoDB" + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                pieRemitoTB.Connection.Close();
            }
        }

        public PieRemito ObtenerPieSegunCodigo(short nro1, int nro2, byte tipo)
        {
            PieRemito resultado = new PieRemito();

            pie_remitoTableAdapter pieTB = new pie_remitoTableAdapter();

            pieTB.Connection.Open();
            MySqlTransaction transaccion = pieTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = empresa.CodigoEmpresa;

                DataTable resultadoConsulta = pieTB.GetDataByObtenerPieRemitoPorCodigo(codigoEmpresa, nro1, nro2, tipo);

                if (resultadoConsulta.Rows.Count > 0)
                {
                    foreach (DataRow item in resultadoConsulta.Rows)
                    {
                        resultado.CodigoEmpresa = Convert.ToInt16(item["codigo_empresa"].ToString());
                        resultado.NroComprobante1 = Convert.ToInt16(item["nro_comprobante1"].ToString());
                        resultado.NroComprobante2 = Convert.ToInt16(item["nro_comprobante2"].ToString());
                        resultado.CodigoTipo = Convert.ToByte(item["codigoTipo"]);

                        resultado.SubTotal = Convert.ToDecimal(item["subtotal"].ToString());
                        resultado.Bonificacion = Convert.ToDouble(item["bonificacion"].ToString());
                        resultado.Transporte = item["transporte"].ToString();
                        resultado.Viajante = item["viajante"].ToString();
                        resultado.Bulto = Convert.ToInt16(item["bultos"].ToString());
                        resultado.PesoKilogramo = Convert.ToDouble(item["peso"].ToString());

                        double subTotal = Convert.ToDouble(resultado.SubTotal);
                        double bonificacion = resultado.Bonificacion;

                        resultado.Total = Convert.ToDecimal((subTotal + (subTotal * (bonificacion / 100))));
                    }
                }
                else
                {
                    resultado.NroComprobante1 = -1;
                    resultado.NroComprobante2 = -1;
                }
            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error ObtenerPieSegunCodigo(short nro1, int nro2, byte tipo) - PieRemitoDB --> " + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                pieTB.Connection.Close();
            }

            return resultado;

        }

        //Actualizar el pie del remito
        private int UpdatePieRemito(int nro1, int nro2, int tipo, decimal subTotal, double bonificacion, string transpote, string viajante, int bulto, double pesoKilogramo)
        {

            int resultadoConsulta = 0;

            pie_remitoTableAdapter pieTB = new pie_remitoTableAdapter();

            pieTB.Connection.Open();

            MySqlTransaction transaccion = pieTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = empresa.CodigoEmpresa;

                decimal pesoKilo = Convert.ToDecimal(pesoKilogramo);

                resultadoConsulta = pieTB.UpdatePieRemito(subTotal, (short) bonificacion,transpote, viajante, (short) bulto, pesoKilo , codigoEmpresa, (short)nro1, nro2, tipo);
                transaccion.Commit();
            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error UpdatePieRemito - PieRemitoDB" + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                pieTB.Connection.Close();
            }

            return resultadoConsulta;
        }

        #endregion

        #region Methods

        public int UpdatePieRemito(PieRemito pie)
        {
            return UpdatePieRemito(pie.NroComprobante1, pie.NroComprobante2, pie.CodigoTipo, pie.SubTotal, pie.Bonificacion, pie.Transporte, pie.Viajante, pie.Bulto, pie.PesoKilogramo);
        }

        #endregion
    }
}
